
# 1.邻接集合
# 邻接集合就是把顶点的邻接点放在一个集合中
# 将节点的编号赋值给相应的节点，方便操作
# a->(b,c,d,e,f) #与a相连的节点
# b->(c,e) #与b相连的节点
# c->(d)
a, b, c, d, e, f, g, h = range(8) # 序号 结果是(0 1 2 3 4 5 6 7)，即：a=0,b=1,c=2....
print(a, b, c, d, e, f, g, h)

N = [{'b', 'c', 'd', 'e', 'f'}
    , {'c', 'e'}
    , {'d'}
    , {'e'}
    , {'f'}
    , {'c', 'g', 'h'}
    , {'f', 'h'}
    , {'f', 'g'}]

print(N[a])
print(N[b])
print(N[c])




'''
# 2.邻接列表
# 数据结构和邻接集合差不多，唯一的不同是用列表来储存
# 表示同一个图
# a, b, c, d, e, f, g, h = range(8) # 序号 结果是(0 1 2 3 4 5 6 7)
# a:['b', 'c', 'd', 'e', 'f']
# b:['c', 'e']

a, b, c, d, e, f, g, h = range(8) 
N = [ ['b', 'c', 'd', 'e', 'f'],
['c', 'e'],
['d'],
['e'],
['f'],
['c', 'g', 'h'],
['f', 'h'],
['f', 'g'] ]
# 邻接列表表示图结构，与邻接集合的操作相同

print(N[a])
print(N[h])
'''

'''
# 3.邻接字典
# 临界字典与前面两个的不同之处在于，其不仅采用字典来储存，字典是键值对，键值对中的value用来表示边的权值这一信息，能表示出
# 与邻居节点之间的关联性
a, b, c, d, e, f, g, h = range(8) # 序号 结果是(0 1 2 3 4 5 6 7)
N = [{'b':2, 'c':1, 'd':3, 'e':9, 'f':4},
{'c':4, 'e':3},
{'d':8},
{'e':7},
{'f':5},
{'c':2, 'g':2, 'h':2},
{'f':1, 'h':6},
{'f':9, 'g':8}]

print(N[a])
print('e' in N[a])
'''

'''
# 4.嵌套字典
# 不用添加序号了
N = {'a':{'b':2, 'c':1, 'd':3, 'e':9, 'f':4},
'b':{'c':4, 'e':3},
'c':{'d':8},
'd':{'e':7},
'e':{'f':5},
'f':{'c':2, 'g':2, 'h':2},
'g':{'f':1, 'h':6},
'h':{'f':9, 'g':8}}

print(N['a'])
'''

'''
# ４．邻接矩阵
# 邻接矩阵，通过一个二维数组，对应图中的每个节点，使用０，１来表示相关节点是否为当前节点的邻居
# 可以使用嵌套list实现
a, b, c, d, e, f, g, h = range(8) # 序号 结果是(0 1 2 3 4 5 6 7)
N = [[0, 1, 1, 1, 1, 1, 0, 0],
    [0, 0, 1, 0, 1, 0, 0, 0],
    [0, 0, 0, 1, 0, 0, 0, 0],
    [0, 0, 0, 0, 1, 0, 0, 0],
    [0, 0, 0, 0, 0, 1, 0, 0],
    [0, 0, 1, 0, 0, 0, 1, 1],
    [0, 0, 0, 0, 0, 1, 0, 1],
    [0, 0, 0, 0, 0, 1, 1, 0]]

print(N[a][b] == 1)
print(sum(N[c]))
'''

'''
# 扩展邻接矩阵，实现一个没有自循环，对边加权 、无自循环状态，
# 对角线元素全部为０ 、加权，用权值替换真值 、将不存在的边设置一
# 个去穷大的权值(float('inf'))，或None
a, b, c, d, e, f, g, h = range(8) # 序号 结果是(0 1 2 3 4 5 6 7)
inf = float('inf')
N = [[ 0, 2, 1, 3, 9, 4, inf, inf],
    [inf, 0, 4, inf, 3, inf, inf, inf],
    [inf, inf, 0, 8, inf, inf, inf, inf],
    [inf, inf, inf, 0, 7, inf, inf, inf],
    [inf, inf, inf, inf, 0, 5, inf, inf],
    [inf, inf, 2, inf, inf, 0, 2, 2],
    [inf, inf, inf, inf, inf, 1, 0, 6],
    [inf, inf, inf, inf, inf, 9, 8, 0]]

print(N[a][b])
'''